#ifndef game_hpp
#define game_hpp

#include "main.hpp"
#include "hero.hpp"
#include "GUI.hpp"
#include "eq.hpp"
#include "map.hpp"
#include "npc.hpp"
#include "logger.hpp"
#include "moob.hpp"
#include "minimap.hpp"
#include "minigame.hpp"
#include <vector>

class cGame
{
    private:
        ///ZMIENNE
        bool run;//informuje nas czy gra jest wlaczona
        cGUI * GUI;//GUI w grze

        int frames;//klatki w grze
        int last_time_FPS;//ostatni czas kiedy były liczone FPS'y
        int FPS;//ilosc FPS aktualizowana co 1 sek

        double lastUpdate;//ostatni update czasu
        float dt;//delta czasu do osttaniej aktualizacji
        float MAX_ACCUMULATED_TIME;//max nagromadzenie czasu (1 sek)

        ///METODY
        bool allegroInit();//inicjujemy biblioteke allegro
        void loadItems();//ladujemy informacje o itemach
        void loadMoobs();//ladujemy informacje o moobkach
        sPoint * countShow();//liczy pozycje show

	public:
        ///ZMIENNE
        bool pause;//pauza w grze
        sPoint * size;//rozmiar okna gry
        sPoint * show;//pozycja wyswietlania
        bool keys[36];//tablica z przyciskami
        bool MOUSE_FREE;//czy myszka jest naciesnieta
        BITMAP * bufor;//glowny bufor, na ktorym wszytko rysujemy
        float accumulator;//nagromadzenie czasu rpzeznzczone na obliczanie fizyki
        float TIME_STEP;//krok czasowy, co ile wykonuje obliczenia na fizyce

        cMap * map;//wskaznik na nasza mape
        cMiniGame * minigame;
        cMiniMap * minimap;//wskaznik na minimape
        cHero * hero;//wskaznik na naszego bohatera
        std::vector <cNPC*> NPC;//tablica z wskaznikami na NPC
        std::vector <cMoob*> moobs;//tablica naszych potworkow

        cLogger * log;//logger do wyswietlania wiadomosci (next lvl, sprzedarz, kupno itd...)

        cItemResources * itemInfo;//wskaznik na informacje o itemkach
        std::vector <cMoobResources*> moobInfo;//wskaznik na informacje o moobkach

		///METODY
		void installMouse();//instaluje myszke
		void checkKeys();//sprawdza czy klawisze zostaly wcisniete
		bool isRunning();//czy gra jest jest wlaczona
		void addNPC(float x, float y, float angle, const char * filename);//dodaje wskaznik na NPC do tablicy
		void addMoob(int id, float x, float y, short type, float angle = 0);//dodaje wskaznik na Mooba do tablicy
		void timeActualisation();//aktualizacja czasu gry

		//MENU
		void main_menu();//main menu
		void start_menu();//start game menu
		void options_menu();//menu opcji
		void credits_menu();//menu creditsow
		void exit_game();//zamkniecie gry

		//rysowanie calego okna gry
		void draw();

        //c-structor
		cGame(int w, int h);

		//d-structor
		~cGame();
};

#endif
